簡單來說,Python 在 Tableau Desktop 中使用方法有兩種,第一種是將 TabPy 當作 Python 直譯器,將 Python 程式碼直接寫在 Tableau Desktop 中,需要運算時再將該程式碼傳送給 TabPy 執行。第二種是預先寫好函式,將其存放於 TabPy Server,Tableau 要呼叫時只需指定函式名稱與傳遞資料即可。這裡會分享如何使用第一種方式,將 Python 整合進 Tableau Desktop 使用。
以 Sample - Superstore
為資料來源,開啟一個全新的工作簿,我們將會建立四個 Calculated Field 分別使用 SCRIPT_BOOL
、SCRIPT_INT
、SCRIPT_REAL
與 SCRIPT_STR
四個函式來示範如何在 Tableau Desktop 中使用 Python。
這四個函式的參數格式都相同 (string, expression, ...)
,第一個參數為 Python 程式碼,第二個與之後的參數都為所要傳遞的資料。TabPy 預設以 _arg#
變數名稱來存取 Tableau 傳遞來的資料,#
代表從 1
開始的數字,數字依資料所在的參數位置而定。所有傳遞的資料在 TabPy 中都會以 List 的型態存在,因此所有的 _arg#
都為 List 物件
建立一個名為 銷售額大於10000
的 Calculated Field 且其函式如下,意思是若銷售額 SUM([Sales])
大於 10000
,對應的回傳值會是 True
,反之為 False
。SUM([Sales])
為第 1 個資料參數,因此若想在 Python 程式中存取則是使用 _arg1
變數名
SCRIPT_BOOL("return [x > 10000 for x in _arg1]", SUM([Sales]))
建立一個名為 2倍銷售額
的 Calculated Field 且其函式如下,意思是在 Python 中先將資料各別乘以 2 再取整數回傳
SCRIPT_INT("return [int(x * 2) for x in _arg1]", SUM(Sales))
建立一個名為 銷售額平方根
的 Calculated Field 且其函式如下,意思是在 Python 中先將 math
套件 import 進來,再將資料各別取根號值回傳
SCRIPT_REAL("import math
return [math.sqrt(x) for x in _arg1]", SUM([Sales]))
建立一個名為 銷售額說明
的 Calculated Field 且其函式如下,這裡傳入兩種資料分別為銷售額 SUM([Sales])
與州名 ATTR([State])
,在 Python 中要存取銷售額是使用 _arg1
,而存取州名是使用 _arg2
變數名稱,因為它是第 2 個傳入的資料參數
SCRIPT_STR("
return [f'{x[1]} 的銷售額為 {int(x[0])}' for x in zip(_arg1, _arg2)]
", SUM([Sales]), ATTR([State]))
將 State
、銷售額大於10000
、銷售額說明
拖曳到 Rows,Sales
、2倍銷售額
、銷售額平方根
拖曳到 Columns,簡單地人工肉眼驗證是否運算正確
透過簡單的例子示範如何將 Python 寫在 Tableau Desktop 之中並獲得回傳值,讓讀者有辦法運用這四個函式創造出自己的計算方法。這種使用方式很直接,因為程式碼是嵌在工作簿內的,但這種作法也有缺點,若其他工作簿也需要使用該程式碼,就必須複製同一份程式碼至不同的工作簿中,最後變得難以管理。
在實作中遇到困難是難免的,這裡提供原始檔作為參考,若仍然無法解決歡迎至下方討論區留言。